package servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bdelegate.BdelegateWeb;
import beans.AperturaMesaBean;
import beans.ItemCartaBean;
import beans.PedidoBean;
import beans.SucursalBean;

public class Pedido extends HttpServlet{

	private static final long serialVersionUID = 1L;
	
	/**
	 * DoGet
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        doPost(request, response);
    }
	
	/**
	 * DoPost
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
		 String accion = request.getParameter("accion");
         String jspPage = "";
         
         BdelegateWeb bd = BdelegateWeb.getInstancia();
         Integer idSucursal = Integer.parseInt(request.getParameter("idSucursal")); 
         
         if ((accion == null) || (accion.length() < 1))
         {
             //accion = "default";
         }

         if ("nuevoPedido".equals(accion))
         {
        	 request.setAttribute("idSucursal", idSucursal);
             jspPage = "/terminal_mozo/nuevoPedido.jsp";
             
         } else if( "nuevoPedidoPaso2".equals(accion)) {
        	 //paso 2 del pedido
        	 SucursalBean sucursal = bd.obtenerDatosSucursal(idSucursal);
        	 
        	 //paso los atributos del paso 1
        	 request.setAttribute("idSucursal", idSucursal);
        	 
        	 Integer aperturaMesaId = Integer.parseInt(request.getParameter("aperturaMesaId"));
        	 request.setAttribute("aperturaMesaId", aperturaMesaId);
        	 Integer mozoId = Integer.parseInt(request.getParameter("mozoId"));
        	 request.setAttribute("mozoId", mozoId);
        	 Integer areaId = Integer.parseInt(request.getParameter("areaId"));
        	 //String areaDesc = MetodosServlets.getInstancia().obtenerDescArea(areaId);
        	 request.setAttribute("areaId", areaId);
        	 
        	 //cargo los items de la carta
        	 String comboItemsCarta = MetodosServlets.getInstancia().obtenerComboItemsCarta(sucursal, areaId);
        	 request.setAttribute("comboItemsCarta", comboItemsCarta);
        	 
        	 jspPage = "/terminal_mozo/nuevoPedido_2.jsp";
         }
         
         //accion para redireccionar a la apertura de mesa
         else if("cancelar".equals(accion)) {
        	 jspPage = "/terminal_mozo/home.jsp";
         }
         else if("generarNuevoPedido".equals(accion)) {
        	 System.out.println("Generando nuevo Pedido");
        	 
        	 SucursalBean sucursal = bd.obtenerDatosSucursal(idSucursal);
        	 
        	 //obtengo la apertura de mesa
        	 Integer aperturaMesaId = Integer.parseInt(request.getParameter("aperturaMesaId"));
        	 
        	 AperturaMesaBean aMesa = MetodosServlets.getInstancia().buscarAperturaMesa(aperturaMesaId, sucursal);
        	 //Integer mozoId = Integer.parseInt(request.getParameter("mozoId"));
        	 System.out.println("\nPedido Servlet - Apertura Mesa Encontrada: " + aMesa.getIdAperturaMesa());
        	 
        	 //obtengo la lista de ItemsCarta
        	 String[] itemsCarta = request.getParameterValues("itemCartaIdArray[]");
        	 List<ItemCartaBean> listaItemsPedidos = MetodosServlets.getInstancia().buscarItemsCarta(sucursal, itemsCarta);
        	 
        	 System.out.println("tamaño Lista ItemCarta: " + listaItemsPedidos.size());
        	 for (ItemCartaBean itemCartaBean : listaItemsPedidos) {
				System.out.println("\nPedido Servlet - Item Carta "+ itemCartaBean.getId() + " Desc: " + itemCartaBean.getPlato().getDescripcion());
			}
          	 //persistir
        	 bd.generarPedido(aMesa, listaItemsPedidos);
        	 
        	 jspPage = "/terminal_mozo/home.jsp?message=succees";
         }
         else if("registrarPedido".equals(accion)){
        	 //Inicio de Registracion de Pedido
        	 request.setAttribute("idSucursal", idSucursal);
        	 jspPage = "/cajero/registrarPedido.jsp";
         }
         else if("registrarPedidoPaso2".equals(accion)){
        	 SucursalBean sucursal = bd.obtenerDatosSucursal(idSucursal);
        	 
        	 request.setAttribute("idSucursal", idSucursal);
        	 //paso los datos del paso 1
        	 Integer aperturaMesaId = Integer.parseInt(request.getParameter("aperturaMesaId"));
        	 request.setAttribute("aperturaMesaId", aperturaMesaId);
        	 //Integer mozoId = Integer.parseInt(request.getParameter("mozoId"));
        	 //request.setAttribute("mozoId", mozoId);
        	
        	 //genero la tabla de pedidos
        	 List<PedidoBean> pedidos = MetodosServlets.getInstancia().buscarPedidosPorAperturaMesa(aperturaMesaId, sucursal);
        	 String tablaPedidos = MetodosServlets.getInstancia().generarTablaPedidosApMesa(pedidos);
        	 request.setAttribute("tablaPedidos", tablaPedidos);
        	 jspPage = "/cajero/registrarPedido_2.jsp";
         }
         else if("procesarRegistrarPedido".equals(accion)) {
        	 
        	 //procesar el registro del pedido
        	 SucursalBean sucursal = bd.obtenerDatosSucursal(idSucursal);
        	 
        	 Integer aperturaMesaId = Integer.parseInt(request.getParameter("aperturaMesaId"));
        	 AperturaMesaBean aMesa = MetodosServlets.getInstancia().buscarAperturaMesa(aperturaMesaId, sucursal);
        	 
        	 //Integer mozoId = Integer.parseInt(request.getParameter("mozoId"));

        	 //obtengo la lista de Pedidos
        	 String[] pedidos = request.getParameterValues("pedidosSeleccionados[]");
        	 List<PedidoBean> listaPedidos = MetodosServlets.getInstancia().buscarPedidos(aMesa, pedidos);
        	 
        	 //persistir
        	 bd.registrarPedido(aMesa, listaPedidos);
        	 
        	 jspPage = "/cajero/home.jsp?message=succees";
         }
        	 dispatch(jspPage, request, response);
    }
	
	/**
	 * Dispatch
	 * 
	 * @param jsp
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void dispatch(String jsp, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        if (jsp != null)
        {
        	/*Envia el control al JSP que pasamos como parametro, y con los 
        	 * request / response cargados con los parametros */
            RequestDispatcher rd = request.getRequestDispatcher(jsp);
            rd.forward(request, response);
        }
    }

}
